package cn.datastruct.three;

/*
    顺序队列（不能重复使用）
        1，front,rear,maxsize,arr[maxsie],成员变量
        2，带参构造函数，无参构造函数
        3，成员函数
            3.1，设定arr[maxsize],front,rear,初始化
            3.2，isEmpty(),是否队空，返回boolean类型变量
            3.3, isFull(),是否队满
            3.3,add(int a),添加数据
            3.4，pop()，弹出数据
            3.5，getFront(),获取队头数值
            3.6，打印队列
* */
public class QueueArray {
    //成员变量
    private int maxsize;
    private int front;
    private int rear;
    private int[] arr;

    //构造函数
    //3.1，设定arr[maxsize],front,rear,初始化

    public QueueArray(int maxsize) {
        this.maxsize = maxsize;
        this.front = -1;
        this.rear = -1;
        this.arr = new int[maxsize];
    }

    public QueueArray() {
    }

    //成员函数
    //3.2，isEmpty(),是否队空，返回boolean类型变量
    public boolean isEmpty() {
        return front == rear;
    }

    //3.3, isFull(),是否队满
    public boolean isFull() {
        return rear == this.maxsize - 1;
    }

    //3.3,add(int a),添加数据
    public void add(int a) {
        if (isFull()) {
            System.out.println("此队列为满，此次操作失败");
            return;
        }
        this.arr[this.rear++ + 1] = a;
    }

    //3.4，pop()，弹出数据
    public void pop() {

        if (isEmpty()) {
            System.out.println("此队列为空，此次操作失败");
            return;
        }
        this.front++;
    }
    //3.5，getFront(),获取队头数值
    public int getFront(){
        return this.arr[this.front + 1];
    }
    //3.6，showQuneu(),打印队列
    public void showQuene(){
        if(isEmpty())
            return;
        for (int i = this.front + 1; i <= this.rear; i++) {
            System.out.printf("%d\t", this.arr[i]);
        }
        System.out.println();
    }
}
